package com.atguigu.gulimall.order;

import feign.codec.Decoder;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.context.annotation.Bean;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 订单服务
 *  整合RabbitMQ步骤
 *     1、引入依赖
 *     <dependency>
 *        <groupId>org.springframework.boot</groupId>
 *        <artifactId>spring-boot-starter-amqp</artifactId>
 *     </dependency>
 *     2、根据RabbitMQAutoConfiguration类找入口
 *              可以看到这个配置类在注解中RabbitProperties，需要我们配置的配置项
 *     3、配置文件配置（基础配置）
 *     4、测试（在测试类中写创建交换机，队列，发送消息）
 *     5、监听消息：使用@RabbitListener注解，必须有@EnableRabbit
 *     @RabbitListener：可以标注在类或方法上（监听哪个队列即可）
 *     @RabbitHandler:只能标注在方法上（重载区分不同的消息）
 *      两者的区别：可以同时使用，比如发送两种类型的消息，那么只需要在类上标注@RabbitListener指定的队列
 *                  方法上标注@RabbitHandler接受的参数是发送的类型即可
 *
 */
@EnableRabbit // 开启rabbitMQ功能
@SpringBootApplication
@MapperScan("com.atguigu.gulimall.order.dao")
@EnableDiscoveryClient //nacos注册中心客户端
@EnableRedisHttpSession // 整合redis作为session存储，
@EnableFeignClients // 开启远程调用
public class GulimallOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallOrderApplication.class, args);
    }
}
